Passed
Pull Request — master (#148)
by Mathieu
03:17
created

HolidayToEventsConverter   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 7
eloc 40
dl 0
loc 51
rs 10
c 0
b 0
f 0

3 Functions

Rating   Name   Duplication   Size   Complexity  
A LeaveToEventsConverter.convert 0 22 3
A LeaveToEventsConverter.getTime 0 11 2
A LeaveToEventsConverter.getType 0 5 2
1
import {Inject} from '@nestjs/common';
2
import {
3
  Leave,
4
  Type
5
} from '../../HumanResource/Leave/Leave.entity';
6
import {Event, EventType} from 'src/Domain/FairCalendar/Event.entity';
7
import {IEventRepository} from '../Repository/IEventRepository';
8
import {IDateUtils} from 'src/Application/IDateUtils';
9
10
export class LeaveToEventsConverter {
11
  constructor(
12
    @Inject('IEventRepository')
13
    private readonly eventRepository: IEventRepository,
14
    @Inject('IDateUtils')
15
    private readonly dateUtils: IDateUtils
16
  ) {}
17
18
  public convert(leave: Leave): void {
19
    const user = leave.getUser();
20
    const dates = this.dateUtils.getWorkedDaysDuringAPeriod(
21
      new Date(leave.getStartDate()),
22
      new Date(leave.getEndDate())
23
    );
24
25
    if (!dates || 0 === dates.length) {
26
      return;
27
    }
28
29
    const firstDate = dates[0].toISOString();
30
    const lastDate = dates[dates.length - 1].toISOString();
31
32
    for (const date of dates) {
33
      this.eventRepository.save(
34
        new Event(
35
          this.getType(leave),
36
          user,
37
          this.getTime(leave, firstDate, lastDate, date.toISOString()),
38
          date.toISOString()
39
        )
40
      );
41
    }
42
  }
43
44
  private getTime(
45
    leave: Leave,
46
    firstDate: string,
47
    lastDate: string,
48
    currentDate: string
49
  ): number {
50
    return (firstDate === currentDate && false === leave.isStartsAllDay()) ||
51
      (lastDate === currentDate && false === leave.isEndsAllDay())
52
      ? 50
53
      : 100;
54
  }
55
56
  private getType(leave: Leave): EventType {
57
    return leave.getType() === Type.MEDICAL
58
      ? EventType.MEDICAL_LEAVE
59
      : EventType.LEAVE;
60
  }
61
}
62